package com.ruoyi.project.lely.bean.entity;

import com.baomidou.mybatisplus.annotation.*;
import io.swagger.annotations.ApiModelProperty;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.math.BigDecimal;
import java.time.LocalDate;
import java.time.LocalDateTime;
import javax.validation.constraints.Digits;
import javax.validation.constraints.NotEmpty;
import javax.validation.constraints.NotNull;
import org.hibernate.validator.constraints.Length;

/**
 * 优惠券信息及规则
 *
 * @author luoyong
 */
@Builder
@AllArgsConstructor
@NoArgsConstructor
@Data
@TableName(value = "`ly_coupon`", autoResultMap = true)
public class LyCoupon {


    @ApiModelProperty("ID")
    @TableId("id")
    private Long id;


    @Length(max = 63, message = "优惠券名称长度不能超过63位")
    @NotEmpty
    @ApiModelProperty("优惠券名称")
    @TableField(value = "`name`")
    private String name;


    @Length(max = 127, message = "优惠券介绍，通常是显示优惠券使用限制文字长度不能超过127位")
    @ApiModelProperty("优惠券介绍，通常是显示优惠券使用限制文字")
    @TableField(value = "`desc`")
    private String desc;


    @Length(max = 63, message = "优惠券标签，例如新人专用长度不能超过63位")
    @ApiModelProperty("优惠券标签，例如新人专用")
    @TableField(value = "`tag`")
    private String tag;


    @NotNull
    @ApiModelProperty("优惠券数量，如果是0，则是无限量")
    @TableField(value = "`total`")
    private Integer total;


    @Digits(integer = 10 - 2, fraction = 2)
    @ApiModelProperty("优惠金额，")
    @TableField(value = "`discount`")
    private BigDecimal discount;


    @Digits(integer = 10 - 2, fraction = 2)
    @ApiModelProperty("最少消费金额才能使用优惠券。")
    @TableField(value = "`min`")
    private BigDecimal min;


    @ApiModelProperty("用户领券限制数量，如果是0，则是不限制；默认是1，限领一张.")
    @TableField(value = "`limit`")
    private Integer limit;


    @ApiModelProperty("优惠券赠送类型，如果是0则通用券，用户领取；如果是1，则是注册赠券；如果是2，则是优惠券码兑换；")
    @TableField(value = "`type`")
    private Integer type;


    @ApiModelProperty("优惠券状态，如果是0则是正常可用；如果是1则是过期; 如果是2则是下架。")
    @TableField(value = "`status`")
    private Integer status;


    @ApiModelProperty("商品限制类型，如果0则全商品，如果是1则是类目限制，如果是2则是商品限制。")
    @TableField(value = "`goods_type`")
    private Integer goodsType;


    @Length(max = 1023, message = "商品限制值，goods_type如果是0则空集合，如果是1则是类目集合，如果是2则是商品集合。长度不能超过1023位")
    @ApiModelProperty("商品限制值，goods_type如果是0则空集合，如果是1则是类目集合，如果是2则是商品集合。")
    @TableField(value = "`goods_value`")
    private String goodsValue;


    @Length(max = 63, message = "优惠券兑换码长度不能超过63位")
    @ApiModelProperty("优惠券兑换码")
    @TableField(value = "`code`")
    private String code;


    @ApiModelProperty("有效时间限制，如果是0，则基于领取时间的有效天数days；如果是1，则start_time和end_time是优惠券有效期；")
    @TableField(value = "`time_type`")
    private Integer timeType;


    @ApiModelProperty("基于领取时间的有效天数days。")
    @TableField(value = "`days`")
    private Integer days;


    @ApiModelProperty("使用券开始时间")
    @TableField(value = "`start_time`")
    private LocalDate startTime;


    @ApiModelProperty("使用券截至时间")
    @TableField(value = "`end_time`")
    private LocalDate endTime;


    @ApiModelProperty("创建时间")
    @TableField(value = "`create_time`", fill = FieldFill.INSERT)
    private LocalDateTime createTime;


    @ApiModelProperty("更新时间")
    @TableField(value = "`update_time`", fill = FieldFill.INSERT_UPDATE)
    private LocalDateTime updateTime;


    @ApiModelProperty("逻辑删除")
    @TableField(value = "`deleted`", fill = FieldFill.INSERT)
    private Integer deleted;

}
